package com.bjpowernode.boss.utils;

import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTVerifier;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.exceptions.JWTVerificationException;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 *
 */
public class JwtUtil {

    public static final String JWT_SECRET = "W0fd3)iYp@uy34dsb/0OT";


    /**
     * 生成jwt
     * @param userJson
     * @return
     */
    public static String createJwt(String userJson){
        // 组装头
        Map<String , Object> header = new HashMap<>();
        header.put("alg", "HS256");
        header.put("alg", "JWT");

        // 设置过期时间
        DateTime expireDate = DateUtil.offsetMinute(new Date(), 10000);

        // 链式编程
        return JWT.create()
                .withHeader(header) // 头
                .withExpiresAt(expireDate)  // 过期时间
                .withClaim("user", userJson)  // 负载数据
                .sign(Algorithm.HMAC256(JWT_SECRET)); // 签名
    }

    public static Boolean verifyJWT(String jwt) {
        try {
            // 使用密钥创建一个jwt验证对象
            JWTVerifier jwtVerifier = JWT.require(Algorithm.HMAC256(JWT_SECRET)).build();
            // 使用jwt验证对象验证jwt , 如果该方法没有抛出异常 , 就说明jwt验证通过 , 否则就是验证未通过
            jwtVerifier.verify(jwt);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }
}
